package com.ftg.learn.chapter15;

/**
 * 回字处理分解过程
 */
public class Huizi2 {

    public static void main(String[] args) {

        String[][] str = {
                 {"01","02","03","04"}
                ,{"12","13","14","05"}
                ,{"11","16","15","06"}
                ,{"10","09","08","07"}
                ,{"20","19","18","17"}
                ,{"30","31","38","37"}
                ,{"50","49","48","47"}
        };

        //第一部分上横向处理
        for(int hang = 0,lie = 0 ;lie < str[hang].length;lie++){
            System.out.print(str[hang][lie] + " ");
        }
        //总结   行不变   列进行增加变化
        System.out.println();
        System.out.println("=======>");
        //第二部分  后纵向输出
        for(int hang = 0,lie=str[hang].length-1 ;hang < str.length;hang++){
            System.out.print(str[hang][lie] + " ");
        }
        //总结   行进行增加变化    列不变

        System.out.println();
        System.out.println("=======>");
        //分析是否可以把两者进行整合，完成半部处理。
        int hang = 0,lie = 0;
        final int x = 7;
        final int y = 4;
        int size = x * y; // 二维数组总元素个数  总行数 * 列数
        int flag = 0;//开关状态 0 为第一种  1 为第二种
        // 用于判断 与处理
        int szhangshu = x;//用于统计的行数，要减少的
        int szlieshu = y;//用于统计的列数，要减少的
        for(int i = 0 ;i < size ;i++){
            System.out.println(str[hang][lie]);
            //判断 处理两种情况
            if(flag == 0){//上 横向处理
                if(lie++ == szlieshu - 1){
                    flag++;
                    lie--;//因++ 下次再用会多 1  这里减去 1
                }
            }
            if(flag == 1){//右侧的处理
                if(hang++ == szhangshu - 1){
                    flag++;
                    hang--;//因++ 下次再用会多 1  这里减去 1
                }
            }

            if(flag == 2 ){//下面的处理   行不变  列减小

                if(lie-- == y - szlieshu){//最大问题在于0是一个常量
                    flag++;
                    lie++;//因-- 下次再用会少 1  这里加上 1
                    szhangshu--;
//                    hang++;//下一次循环时，行会多一个
                }
            }

            if(flag == 3){
                if(hang-- == x-szhangshu){ //x-szhangshu 每一圈后要减少行数，所以这里要成为变量
                    flag = 0;
                    hang++;//因++ 下次再用会多 1  这里减去 1
                    lie++; //列要向前移动一位
                    szlieshu--;//统计的列数要少一个
                }
            }

        }
        System.out.println();
        System.out.println("我们是否已经完成上以及右侧的处理,是否可以直接想到下面的以及左侧的输出");

    }




}
